from common.logger import logger

# def handle_response(response):
#     # 在这里处理响应数据，例如解析、校验等
#     return response.json()


class ResponseHandler:
    # @staticmethod
    # def assert_status_code(response, expected_code):
    #     assert response.status_code == expected_code, f"Expected {expected_code}, got {response.status_code}"

    @staticmethod
    def assert_status_code(response, expected_code):
        logger.info("接口响应数据状态码 ==>> {}".format(response))
        # 解析响应体中的 JSON 数据
        response_data = response.json()

        # 从响应体中提取 'code' 字段
        actual_code = response_data.get('code')
        # 断言 'code' 字段是否符合预期
        assert actual_code == expected_code, f"Expected code {expected_code}, got {actual_code}"

    @staticmethod
    def assert_json_key(response, key, expected_value):
        """
        断言响应的JSON数据中指定键的值是否与预期值相等。
        参数:
        - response: 响应对象，支持.json()方法用于获取JSON数据。
        - key: 需要断言的JSON键。
        - expected_value: 期望的键值。
        如果键的值不等于预期值，将抛出断言错误并给出详细的错误信息。
        """
        json_data = response.json()
        print(json_data)  # 添加这一行以查看实际的响应结构
        assert json_data.get(key) == expected_value, f"Expected {expected_value}, got {json_data.get(key)}"

    @staticmethod
    def extract_token(response):
        """
        从响应的JSON数据中提取并返回指定的token值。
        参数:
        - response: 响应对象，支持.json()方法用于获取JSON数据。
        返回:
        - JSON数据中'data'字典下的'token'值。如果结构中不存在'token'，将返回None。
        """
        try:
            json_data = response.json()
            logger.info("接口响应数据 ==>> {}".format(json_data))
            if json_data is None:
                return None
            # 使用 .get() 方法来安全地访问字典中的值
            if json_data is not None:
               return json_data.get('data', {}).get('token')
        except ValueError:
            # 捕获 JSON 解码异常（如果响应内容不是有效的 JSON）
            return None
        except Exception as e:
            # 捕获其他可能的异常
            logger.error(f"An error occurred: {e}")
            return None

    def handle_response(response):
        # 在这里处理响应数据，例如解析、校验等
        return response.json()

